
#ifndef __MATRIX44_H
#define __MATRIX44_H

#include <iostream>
#include <string>

#include "vector4.h"

class Matrix44
{
private:
	float _m[4][3];
	
public:
	Matrix44();
	Matrix44(float m[4][3]);
	Matrix44(float m[12]);

	float& operator() (unsigned int i, unsigned int j);
	float& get(unsigned int i, unsigned int j);
	
	
	Vector4 operator*(Vector4 &v);
	Vector4 times(Vector4 &v);
	Matrix44 operator*(Matrix44 &m);
	Matrix44 inverse();
	Matrix44 times(Matrix44 *m);
	Matrix44 times(Matrix44 &m);
	
	Matrix44 translateX(float x);
	Matrix44 translateY(float y);
	Matrix44 translateZ(float z);
	Matrix44 translateXYZ(float x, float y, float z);
	Matrix44 rotH(float h);
	Matrix44 rotP(float p);
	Matrix44 rotR(float r);
	Matrix44 rotHPR(float h, float p, float r);
	Matrix44 scale(float s);
	Matrix44 transformXYZHPRS(float x, float y, float z, float h, float p, float r, float s);


	
	void println();
};

#endif
